interface IPerson {
    readonly id: number
    name: string
    age?: number
    sex: string
}

let p1: IPerson = {
    id: 1,
    name: 'atguigu',
    age: 10,
    sex: 'boy'
}

p1.name = '尚硅谷'
// p1.id = 2 // id是只读属性不能重新赋值

console.log(p1.id)

let p2: IPerson = {
    id: 2,
    name: '尚硅谷',
    sex: 'girl',
}

/**
 * 接口限定函数 [了解]
 */
interface SearchFunc { // SearchFunc 函数名
    // 参数类型                        : 返回值类型
    (source: string, subString: string): boolean
}

let fn22: SearchFunc = function (x: string, y: string): boolean {
    return false;
}
// 直接用类型推断
let fn33 = function (x: string, y: string): boolean {
    return false;
}

function fn44(a: string, b: string): boolean {
    return true;
}


/**
 * 接口限定类： 
 * 1. 如果一个类实现了一个接口，那么就要实现接口中定义的方法
 * 2. 一个类可以实现多个接口,那该类就要实现继承的所有接口中的方法
 * 3. 接口也可以继承接口
 * 
 */
interface Alarm {
    alert(): any;
}

interface Light {
    lightOn(): void;
    lightOff(): void;
}

class Car implements Alarm, Light {
    alert() {
        
    }
    lightOff(): void {
        
    }
    lightOn(): void {
        
    }
}

// 接口继承接口
interface NewInterface extends Alarm,Light{

}

class Bus implements NewInterface{
    alert() {
        
    }
    lightOff(): void {
        
    }
    lightOn(): void {
        
    }
}

export { }